"""
用户认证 API 文档
"""

from flask_restx import Namespace, fields, Resource

# 创建命名空间
user_auth_ns = Namespace('用户认证', description='小程序用户认证相关接口')

# 定义模型
wechat_login_model = user_auth_ns.model('微信登录请求', {
    'code': fields.String(required=True, description='微信登录code'),
    'nickname': fields.String(description='用户昵称'),
    'avatar': fields.String(description='用户头像'),
    'gender': fields.Integer(description='用户性别:1男,2女')
})

wechat_login_response = user_auth_ns.model('微信登录响应', {
    'code': fields.Integer(description='状态码'),
    'message': fields.String(description='响应消息'),
    'data': fields.Nested(user_auth_ns.model('微信登录数据', {
        'token': fields.String(description='JWT令牌'),
        'user_info': fields.Raw(description='用户信息'),
        'is_new_user': fields.Boolean(description='是否为新用户')
    }))
})

send_sms_model = user_auth_ns.model('发送验证码请求', {
    'phone': fields.String(required=True, description='手机号')
})

send_sms_response = user_auth_ns.model('发送验证码响应', {
    'code': fields.Integer(description='状态码'),
    'message': fields.String(description='响应消息'),
    'data': fields.Raw(description='数据，一般为null')
})

verify_phone_model = user_auth_ns.model('验证手机号请求', {
    'phone': fields.String(required=True, description='手机号'),
    'code': fields.String(required=True, description='验证码')
})

verify_phone_response = user_auth_ns.model('验证手机号响应', {
    'code': fields.Integer(description='状态码'),
    'message': fields.String(description='响应消息'),
    'data': fields.Raw(description='用户信息')
})

refresh_token_response = user_auth_ns.model('刷新令牌响应', {
    'code': fields.Integer(description='状态码'),
    'message': fields.String(description='响应消息'),
    'data': fields.Nested(user_auth_ns.model('刷新令牌数据', {
        'token': fields.String(description='新的JWT令牌')
    }))
})

logout_response = user_auth_ns.model('登出响应', {
    'code': fields.Integer(description='状态码'),
    'message': fields.String(description='响应消息'),
    'data': fields.Raw(description='数据，一般为null')
})

# 接口文档
user_auth_docs = [
    {
        'name': 'wechat-login',
        'endpoint': '/api/auth/v1/auth/wechat-login',
        'method': 'POST',
        'description': '微信登录',
        'parameters': wechat_login_model,
        'responses': {
            200: ('成功', wechat_login_response),
            400: ('请求错误', None),
            500: ('服务器错误', None)
        },
        'security': None
    },
    {
        'name': 'send-sms',
        'endpoint': '/api/auth/v1/auth/send-sms',
        'method': 'POST',
        'description': '发送短信验证码',
        'parameters': send_sms_model,
        'responses': {
            200: ('成功', send_sms_response),
            400: ('请求错误', None),
            500: ('服务器错误', None)
        },
        'security': None
    },
    {
        'name': 'verify-phone',
        'endpoint': '/api/auth/v1/auth/verify-phone',
        'method': 'POST',
        'description': '验证手机号',
        'parameters': verify_phone_model,
        'responses': {
            200: ('成功', verify_phone_response),
            400: ('请求错误', None),
            401: ('未授权', None),
            500: ('服务器错误', None)
        },
        'security': 'BearerAuth'
    },
    {
        'name': 'logout',
        'endpoint': '/api/auth/v1/auth/logout',
        'method': 'POST',
        'description': '用户登出',
        'parameters': None,
        'responses': {
            200: ('成功', logout_response),
            401: ('未授权', None)
        },
        'security': 'BearerAuth'
    },
    {
        'name': 'refresh',
        'endpoint': '/api/auth/v1/auth/refresh',
        'method': 'POST',
        'description': '刷新令牌',
        'parameters': None,
        'responses': {
            200: ('成功', refresh_token_response),
            401: ('未授权', None)
        },
        'security': 'BearerAuth'
    }
]

# 为Swagger文档添加接口
@user_auth_ns.route('/wechat-login')
class WechatLoginAPI(Resource):
    """微信登录"""
    @user_auth_ns.expect(wechat_login_model)
    @user_auth_ns.doc(
        description='微信登录接口',
        responses={
            200: '登录成功',
            400: '请求参数错误',
            500: '服务器错误'
        }
    )
    def post(self):
        """微信登录接口"""
        pass

@user_auth_ns.route('/send-sms')
class SendSmsAPI(Resource):
    """发送短信验证码"""
    @user_auth_ns.expect(send_sms_model)
    @user_auth_ns.doc(
        description='发送短信验证码',
        responses={
            200: '发送成功',
            400: '请求参数错误',
            500: '服务器错误'
        }
    )
    def post(self):
        """发送短信验证码"""
        pass

@user_auth_ns.route('/verify-phone')
class VerifyPhoneAPI(Resource):
    """验证手机号"""
    @user_auth_ns.expect(verify_phone_model)
    @user_auth_ns.doc(
        description='验证手机号',
        security='Bearer',
        responses={
            200: '验证成功',
            400: '请求参数错误',
            401: '未授权',
            500: '服务器错误'
        }
    )
    def post(self):
        """验证手机号"""
        pass

@user_auth_ns.route('/logout')
class LogoutAPI(Resource):
    """用户登出"""
    @user_auth_ns.doc(
        description='用户登出',
        security='Bearer',
        responses={
            200: '登出成功',
            401: '未授权'
        }
    )
    def post(self):
        """用户登出"""
        pass

@user_auth_ns.route('/refresh')
class RefreshTokenAPI(Resource):
    """刷新令牌"""
    @user_auth_ns.doc(
        description='刷新令牌',
        security='Bearer',
        responses={
            200: '刷新成功',
            401: '未授权'
        }
    )
    def post(self):
        """刷新令牌"""
        pass 